perm filename SAVE2[F8,ALS]2 blob
sn#317169 filedate 1977-11-19 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 *CHECKERS as of November 17 1977. EQU's
C00008 00003 ORG H'1800' SELE JUMP
C00023 00004 * NORM FORE
C00034 00005 * RASC SCRA FKT STMV
C00039 00006 * NEXT FIND RFJ LFJ RBJ LBJ
C00053 00007 * RFN LFN RBN LBN NORF NORT
C00060 00008 * AFT
C00071 00009 * EVAL
C00076 00010 * EMPT WAST BRAK
C00083 ENDMK
C⊗;
*CHECKERS as of November 17 1977. EQU's
* S2 section
*Resident package addresses
JOYT EQU H'0C00'
LINE EQU H'0FDF'
SHCB EQU H'0FE2'
INPF EQU H'0FE3'
WTLN EQU H'0FE5'
TXC EQU H'0FE8'
CMRG EQU H'0FEA'
DBNC EQU H'0FEB'
UPI EQU H'0FFA'
JOYI EQU H'21AD'
IJS EQU H'22DB'
SHL EQU H'27C6'
SHR EQU H'27D3'
PUSH EQU H'40A9'
POPS EQU H'40BC'
SPS EQU H'40D0'
WDG EQU H'4105'
WAUD EQU H'41C8'
WAU1 EQU H'41CC'
CDS EQU H'41D5'
WMS EQU H'4205'
UDAT EQU H'424D'
TRAN EQU H'43CD'
FCS EQU H'43D6'
WAIT EQU H'4501'
TIR EQU H'45DB'
CLER EQU H'4762'
*Misc. constants
TCMD EQU H'44'
BCMD EQU H'6D'
TCOL EQU H'80' TEXT COLOR
ULIN EQU H'F5'
COM EQU H'8F7'
*
*RAM assignments
BFLG EQU H'0C20'
BLNF EQU H'0C21' Blink flag
XBLN EQU H'0C22' X value to blink
YBLN EQU H'0C23' Y value to blink
BCNT EQU H'0C24' Counter used in OKMV
BKMV EQU H'0C25' Data to index book moves
HSAV EQU H'0C26' H save location
HSAL EQU H'0C27' HL save location
PLY0 EQU H'0C28' Players choice of ply depth
COL0 EQU H'0C29' 0 if machine plays black
SELX EQU H'0C2A' Move count
AP20 EQU H'0C2C' ACTM+PASM+2 at HL=20
PFLG EQU H'0C2D Player's move flag
OBJ0 EQU H'0C30' Board 1, thru H'0E0F'
TREE EQU H'0E10' Tree data, thru H'0EFF', Player's board first
TRE2 EQU H'0E20' Machine's first board here
TRE3 EQU H'0E30' PLY 1 location
TRE5 EQU H'0E50' PLY 3 location
PLMD EQU H'0E5B' Used for temp store of player's move inf
PLMV EQU H'0ED0' Overlay region used for player's moves
PLMF EQU H'0EE0' and move numbers
SCOR EQU H'0EF0' 28 bytes for scores
XPOS EQU H'0F0C' XPOSITION(CURSOR)
YPOS EQU H'0F0F' YPOSITION(CURSOR)
OBJ1 EQU H'0F10' Board 2, thru H'0FAF'
MOBS EQU H'0FB0' Mobility and DJ flags (14 bytes)
RGSV EQU H'0FC1' Register save start (int. update)
*
*Scratch pad assignments
TEMP EQU H'8'
J EQU H'9'
HU EQU H'A'
HL EQU H'B'
PLOC EQU O'3' LISU value for ACTIVE and PASSIVE
KLOC EQU O'4' LISU value for KING's and special data
ELOC EQU O'5' LISU value for EMPTY's area
ISA EQU O'30' ISAR value for active area
ISP EQU O'34' ISAR value for passive
ISK EQU O'40' ISAR value for kings
ACTM EQU O'46' Location of Active material count
PASM EQU O'47' Location of Passive material count
ISE0 EQU O'50' ISAR value for guard byte
ISE EQU O'51' ISAR value foempty (with offset)
*Mimimum ply depths
PLYT EQU H'FE' Ply depth for Robot Tom (stored as neg.)
PLYD EQU H'FD' Ply depth for Robot Dick
PLYH EQU H'FC' Ply depth for Robot Harry
*SPECIAL CONSTANTS
X EQU H'1'
Y EQU H'2'
VX EQU H'3'
VY EQU H'4'
CHT EQU H'3' CURSOR HEIGHT
YTST EQU H'9'
XZOP EQU H'34' Line for restorre of X zoom
MAXY EQU H'4D' MAX Y COORD (=H'4F'-CHT)
*Linkage locations
PMOV EQU H'1100' Player's move
WMC EQU H'1200' Write message
BORD EQU H'1300' Normal redo of board
SHOW EQU H'1780' Debugging aid to show board
ORG H'1800' SELE JUMP
*-*-*-
SELE PI SHOW
PI WAST Debugging show board
LISU PLOC
LISL 0
LR DC,H
LIS H'C' To get MOVE byte
ADC
LM
LR 0,A Save it temporarily
NS 0 To set status byte
BNZ SEL3
JMP NEXT To get next MOVE byte
SEL3 CLR
COM -1 in A
ADC Get back to move byte
AS 0
NS 0 Remove right-most on-bit
ST Put remaining bits back (and index)
XS 0 This gets the extracted bit
LR 6,A Save it in 6
LM Now get the byte designation
SEL4 LR 5,A
SR 1
SR 1
NI H'3' Separate the byte indicator part
LR 4,A Save it in 4
LR A,5
NI H'13' Separate the JUMP bit and the direction
LR 5,A Save them in 5
DELE LI ISA Process Active and Kings for source deletion
AS 4 Add byte #
LR IS,A Get to initial byte
LR A,S
LR 3,A
XS 6 Delete moving piece
LR S,A from byte
LISU KLOC To get to corresponding KING byte
LR A,S
NS 6 Was the piece a king?
BZ DEL2
XS S If it was delete king bit
LR S,A
LIS H'7' Non-zero in 2 for king
DEL2 LR 2,A 0 for man, 7 for king, (later 1 for promotion)
LISU PLOC Back to active section
*Now locate captured piece if jump or find destination in normal move
LR A,6 Recall MOVE bit
SR 4
BZ INRH Bit was in right half of byte
INLH LR 3,A Save partially shifted MOVE bit
LIS H'1' Get direction
NS 5 To test right-most bit
BZ INL2 RF or LB move where 4 shift is correct
LR A,3
SR 1 LF and LB require an additional shift
LR 3,A
INL2 LIS H'2' Now test for fore or aft
NS 5
BZ BOTH Forward move, no byte shift needed
LR A,D Only to decrement ISAR
INL3 BR BOTH
*
INRH LR A,6 Get MOVE bit again
SL 4 Left shift if in right half
LR 3,A Save partially shifted MOVE bit
LIS H'1'
NS 5 Get direction
BNZ INR2 LF or LB where 4 shift is correct
LR A,3
SL 1 RF and RB require an additional shift
LR 3,A
INR2 LIS H'2' Now test fore and aft
NS 5
BNZ BOTH
LR A,I Only to increment ISAR
BOTH LR A,5 Now is this a jump or a normal move?
*ISAR still points to active region but may designate
*an empty square or the capture square
SR 4 Set status for jump bit
BNZ JUMP
JMP NORM It's a normal move
JUMP LR A,IS
AI H'4' To get to passive pieces
LR IS,A
LR A,S
XS 3 Remove captured piece
LR S,A
LR A,IS
AI H'4' Corresponding king location
LR IS,A
LR A,S Get byte
NS 3 Is the piece a king?
BZ JUM1 No
XS S Yes, Remove it
LR S,A
LIS H'2'
COM
BR JU11
JUM1 LIS H'1'
COM
JU11 LR 0,A
LI PASM
LR IS,A
LR A,S
AS 0
LR S,A
LI ISA Back to moved-from location
AS 4 Byte number is in 4
LR IS,A
LIS H'2'
NS 5 Test for fore or aft
BZ JUMA Fore move
LR A,D Decrement ISAR (destination always in next byte)
BR JUMB
JUMA LR A,I Increment ISAR
JUMB LR A,IS Get the destination byte off-set
AI H'E8' by subtracting O'30' from ISAR value
LR 4,A needed if there is a continuation
LIS H'1' Get direction
NS 5 Test for right or left
LR A,6 Get original piece location
BZ JUM2 0 for R move, ≠0 for L move
SR 1 Left moves involve a right shift of 1
BR JUM3
JUM2 SL 1 Right moves involve a left shift of 1
JUM3 LR 3,A Save bit byte in 3, freeing 6 for other use
LR A,S
XS 3 Set piece down
LR S,A
CLR
AS 2 Was the piece a king?
BZ JUMC No, might be a promotion
CLR
LR 0,A Temporary record of promotion credit
BR JUM6 Already a king so no promotion
JUMC LIS H'2'
NS 5 Which side is active
LR A,IS
BZ JUM4 0 if forward
CI O'30' Is this byte 0?
BNZ JU71 No, so no promotion
LIS H'F' and the king row?
SL 4
BR JUM5 Promotion indicated, no double jump
JUM4 CI O'33' Is this byte 3?
BNZ JU71 No, so no promotion
LIS H'F' and the king row?
JUM5 NS 3
BZ JU71 No
LIS H'1' 1 for promotion
LR 2,A It was 0
LR 0,A Credit for promotion
LR 6,A Used in FIND for no continuation
JUM6 LISU KLOC Get to King position
LR A,S
AS 3 Put down the king
LR S,A
LR A,0
CI H'1' Was there a promotion?
BZ JU71 No
LISU 4
LISL 6
LR A,S
INC Add for promotion
LR S,A
BR JUM9 Can be no continuation if promotion
JUM7 CLR
XS 0 Should we check for a double jump?
BZ JU71 Yes, a 0 means no promotion
JUM9 JMP FORE
* Set up conditions to try to find a continuation
JU71 JMP FORE DEBUGGING BYPASS ----
LR A,HL
SR 4
CI H'A' Is there room?
BM JUM9 No
LR DC,H
LI H'1C' Get to byte location
ADC in the "passed board" position
LR A,3 Save destination info
ST the move byte
LR A,4
ST and the byte #
CLR
COM and a flag of -1
ST in the ACTM position
LR 6,A Continuation signal to FIND
DCI SCOR Advance score
LR A,HL
SR 4
AI -H'2' Scor not saved for HL=1
SL 1
ADC from current board
LR Q,DC
LM
LR 0,A
LM
LR 1,A
LR DC,Q
LIS H'4'
ADC to continuation board
LR A,0
ST
LR A,1
ST
LIS H'2' Copy data two blocks forward
SL 4
AS HL
LR HL,A
LR DC,H
LISU PLOC SC to RA direct
LISL 0
JU72 LR A,I
ST
BR7 JU72
LR A,I
ST
LISU KLOC
JU73 LR A,I
ST
BR7 JU73
LR A,I
ST
LR A,3
LR 1,A Mask for FIND
LR DC,H
PI RASC Load scratchpad
LR DC,H
PI EMPT
JMP RFJ Find continuations if any
* NORM FORE
*Now make normal move
NORM LR DC,H Back in step
CLR
LR 0,A Flag for no promotion
LISU PLOC Get back to Active pieces
LR A,S LISL still OK
AS 3
LR S,A Put in moved piece
LR A,2 Was it a king
NS 2
BNZ NOM6 Yes so don't promote but do put king down
LIS H'2'
NS 5 Test for direction
LR A,IS
BZ NOM4 Is it going forward?
CI O'30' Did it get to the byte 0?
BNZ FORE No
LIS H'F' and in king row?
SL 4
BR NOM5 Mark for promotion
NOM4 CI O'33' Did it get to byte 3?
BNZ FORE No
LIS H'F' and in king row?
NOM5 NS 3
BZ FORE No
LIS H'1'
LR 0,A A promotion flag
NOM6 LISU KLOC Now get to king byte
LR A,S Get corresponding king byte for destination
AS 3 Insert king
LR S,A And replace byte
CLR
AS 0
BZ FORE
LI ACTM Get to active material location
LR IS,A
LR A,S
INC Credit for promotion
LR S,A
FORE LR A,HL Where are we?
CI H'10'
BZ FOR5 Player's move has been made
PI SHOW DEBUGGING AID
PI WAST
LR A,7
COM Change color
LR 7,A
LIS H'1'
SL 4
AS HL
LR HL,A
LR DC,H GET back in step
PI SCRA Prepare for normal advance
LR A,HL Can we advance score?
SR 4
CI H'3' Note HL has already been advanced
BM FOR2 Advance score normally
BNZ FOR4 Special case
DCI SCOR+2
LIS H'C'
SL 4 Use H'C000' for HL=30 level
ST
CLR
ST
BR FOR4 May still be a special case
FOR2 AI -H'2' Scor not saved for HL=10
SL 1 Scores take 2 bytes each so *2
DCI SCOR
ADC Current location
LR Q,DC
XDC
LR DC,Q
LI H'3'
COM Fast -H'4'
ADC Get to earlier entry
LM Copy it
XDC
ST
XDC
LM
XDC
ST
FOR3 JMP FIND Go forward normally
FOR4 DCI SELX
LR Q,DC
LM
CI H'1'
BM FOR3 Normal play
INC Book or random move has been made
LR DC,Q
ST so count this as a move
CLR Clear start of PLMV list for
DCI PLMV listing player's possible moves
ST
LR DC,H
XDC
DCI TREE Prepare for TRAN
LR H,DC
LIS H'1'
SL 4
LISU 2
LISL 0
LR S,A
PI TRAN
JMP FIND FIND exits to PMOV when HL is H'10'
FOR5 PI BORD Show board after players move
LIS H'4' "MY MOVE"
LR 0,A
PI WMC
DCI SCOR Start scores off at H'C000'
LI H'C0' so that CM's will always work
ST
CLR
ST
LI H'C0'
ST
CLR
ST
LR A,7
COM Change color
LR 7,A
LIS H'1'
SL 4
AS HL
LR HL,A
LR DC,H Advance H
PI SCRA SC to RA with sides reversed
LR DC,H
PI RASC RA to SC preparing for a normal move
DCI SELX
LR Q,DC
LM
INC Add 1 to move count
LR DC,Q
ST
CI H'1'
BZ FOR6 Use stored move
JMP FIND Go find normal reply
FOR6 LISU 2 Get random number
LISL 5
LIS H'3'
NS S 0 to 3 random number
LR 0,A
SR 1
LR 1,A 0 to 1 random number
LIS H'1'
NS 0
LR 0,A 2nd 0 to 1 random number
* Machine to make 2nd move from book
DCI BKMV Get stored move munber
LM
SL 1 X2, 2 entries for each input move
AS 0 Random choice between them
DCI BOK2 Stored table of book replies
ADC
LM Get reply number
LR 0,A
CLR Use second number to select which half
XS 1
LR A,0
BZ BMV2
SR 4
BMV2 NI H'7'
LR 0,A The final selection
DCI REDM Possible Red moves
BM17 LM Get byte record
LR 1,A
BM18 LR A,1
NS 1
BNZ BM19 Is this byte exhausted?
LM Step over byte info
BR BM17 Go to next byte record
BM19 LR 2,A
AI H'FF' Subtract 1
NS 1
LR 1,A byte less rightmost bit
XS 2 This leaves 1 bit in A
DS 0
BP BM18
LR 6,A Save the byte bit
LM Get the byte info
LR 4,A The byte indicator
LR DC,H
LIS H'C'
ADC
LR A,6
ST
LR A,4
ST
JMP SELE
*-*-*- Initial moves for red
REDM DC B'00000111' 3 pieces
DC B'00001010' Byte 2, RB
DC B'00001111' 4 pieces
DC B'00001011' Byte 2, LB
DC H'00'
* RASC SCRA FKT STMV
*-*-*- RASC RAM to SC transfer
RASC LR K,P RAM to SC
LISU PLOC ←SC buffer with Active and Passive
LISL 0
RAS2 LM
LR I,A
BR7 RAS2
LM
LR I,A
LISU KLOC
RAS3 LM
LR I,A
BR7 RAS3
LM
LR I,A
PK
* SCRA SC to RAM with side reversal
SCRA LR K,P SC to RAM for side reversal
LISU PLOC
LISL 4
LIS H'8'
LR 0,A
SCR1 LR A,I
ST
DS 0
BNZ SCR1
LISU KLOC
LISL 0
LIS H'4'
LR 0,A
SCR2 LR A,I
ST
DS 0
BNZ SCR2
CLR
ST
ST
LISL 7
LR A,D
ST
LR A,D
ST
PK
*-*-*- Test if Kings only can move
FKT LR K,P
CLR
AS 7
BNZ FK1 Only kings in this direction
FKT2 CLR
XS 3
PK Normal pieces OK
BKT LR K,P
CLR
AS 7 Test sides for backward move
BNZ FK2 NORMAL pieces can move
FK1 LIS H'2'
SL 4
AS 4
LR IS,A KINGS only can move
LR A,S
NS 3
LR 3,A
FK2 PK
*Subroutine to add to MOBILITY, and to store MOVE and FLAG bytes if necessary
STMV LR K,P
LR A,HL
SR 4
CI H'01' Is this the player's board
BNZ STM3 No
DCI PLMV Player's moves stored separately
STM0 CLR
XM
BZ STM1 Find empty space
LM Skip info space
BR STM0 Try again
STM1 CLR Back up
COM
ADC
LR A,3
ST
LR A,4
SL 1
SL 1
AS 5
ST
CLR
ST Store 0 as stop
BR STM2
STM3 CLR
XS 2 To set status byte
BNZ STM2 One is already stored
LR DC,H Get back in step (may not be necessary)
LIS H'C' To get to MOVE byte
ADC
STM4 LR A,3
ST Store MOVE byte in RAM
LR A,4 Get the byte pointer
SL 1
SL 1
AS 5
ST Put this into RAM
LR DC,H May be necessary
STM2 CLR
LR 0,A To accumulate count
LR A,3
STM5 DS 0
AI H'FF'
NS 3 Removes rightmost bit
LR 3,A
BNZ STM5
LR A,0
COM
INC
AS 2 Add in previous count
LR 2,A
PK
* NEXT FIND RFJ LFJ RBJ LBJ
NEXT PI EMPT Needs redoing if came to SELE via AFT
LR DC,H
LR A,HL
CI H'30'
BP NEXX Can not be a continuation
LIS H'3' Look to earlier board data
COM
ADC
LM
LR 1,A Get move byte just in case
LM
LR 4,A and byte info
CLR
LR 2,A
XM Now look at ACTM
BP NEXX Not a continuation board
LR DC,H
LIS H'D'
ADC
LIS H'3' Get last used direction
NM
INC
CI H'3'
BM NEXY Last direction used
LR 5,A
CLR
COM
LR 6,A Set continuation flag
JMP RBJ0
NEXX LR DC,H
LIS H'D' Last used byte info
ADC
LM
LR 5,A
NI H'F'
INC
LR 0,A
CI H'F' Is this the last byte and direction?
BP NEXA
NEXY JMP AFT Yes, so back up
NEXA LR DC,H
LIS H'1' Set to 1 for normal back-up
LR 6,A
CLR
COM
LR 1,A All pieces allowed to move
LR DC,H
LR A,0
SR 1
SR 1
NI H'3'
LR 4,A
LR A,5
CI H'F'
LIS H'3'
BM NEXJ Jumps required
NS 0
LR 5,A
BZ NEN0
JMP RBN0
NEN0 JMP RFN
NEXJ NS 0
LR 5,A
BZ NEJ0
JMP RBJ0
NEJ0 JMP RFJ
*We enter here on going forward
FIND LR DC,H
LR A,HL
CI H'20'
BNZ FIN1
LIS H'E' Compute ACTM+PASM+5
ADC
LIS H'5' Allows for 3 promotes
AM
AM
DCI AP20 Used by EVAL to compute MAT
ST
LR DC,H
FIN1 PI RASC Get board into SC
PI EMPT Compute the empty squares
PI SHOW
PI WAST
CLR
LR 4,A Start with byte 0
LR 2,A Mobility count and move-found flag
LR 6,A So all moves will be found
COM
LR 1,A To find all possible jump moves
RFJ LI ISA Active pieces
AS 4 Add byte off-set
LR IS,A Get to byte
LR A,S
NS 1 FF if normal, 1 bit only for continuation
LR 3,A 3 used to develop final byte
PI FKT Any forward moving pieces?
BZ RBJ No, look to backward moving
LI ISE+1 Look to empty squares forward
AS 4 Add byte off-set
LR IS,A Destination byte location
LR A,S
SR 1
NS 3
LR 3,A Only pieces that have place to land
LI ISP Passive pieces
AS 4
LR IS,A
LR A,I Look to RF passive pieces forward
SL 4 In front of left-most bits
LR 0,A
LR A,S
SR 4 In front of right-most bits
SR 1
AS 0
NS 3
LR 3,A Pieces that can jump RF
BZ LFJ Were any found?
LI H'1' The RFJ direction and J indicator
SL 4
LR 5,A
PI STMV Store move byte and info
CLR
AS 6 Recall indicator
BZ LFJ We want all moves
JMP SELE
LFJ LI ISA
AS 4 Add byte off-set
LR IS,A Get to initial byte
LR A,S
NS 1 FF if normal, 1 bit only for continuation
LR 3,A
PI FKT
LI ISE+1 Empty squares forward
AS 4
LR IS,A
LR A,S
SL 1
NS 3
LR 3,A Only pieces that have a place to land
LI ISP
AS 4
LR IS,A
LR A,I
SL 4
SL 1
LR 0,A
LR A,S
SR 4
AS 0
NS 3
LR 3,A Pieces that can jump LF
BZ RBJ
LI H'11' The LFJ direction and J indicator
LR 5,A
PI STMV
CLR
XS 6
BZ RBJ
JMP SELE
RBJ0 LR A,5
CI H'2' Which direction, 1, 2, or 3?
BM LBJ It was a 3
BNZ LFJ It was a 1
RBJ LI ISA
AS 4 Add byte off-set
LR IS,A Get to initial byte
LR A,S
NS 1 FF if normal, 1 bit only for continuation
LR 3,A
PI BKT Any backward moving pieces?
BZ FIN3 No
LI ISE-1 Look to empty squares backward
AS 4
LR IS,A
LR A,S
SR 1
NS 3
LR 3,A
LI ISP-1 Look to passive pieces backward
AS 4
LR IS,A
LR A,I
SL 4
LR 0,A
LR A,S
SR 4
SR 1
AS 0
NS 3
LR 3,A Pieces that can jump RB
BZ LBJ
LI H'12' The RBJ direction and J indicator
LR 5,A
PI STMV
CLR
XS 6
BNZ FINB
LBJ LI ISA
AS 4 Add byte off-set
LR IS,A Get to initial byte
LR A,S
NS 1 FF if normal, 1 bit only for continuation
LR 3,A
PI BKT
LI ISE-1 Empty squares backward
AS 4
LR IS,A
LR A,S
SL 1
NS 3
LR 3,A
LI ISP-1 Look to passive pieces backward
AS 4
LR IS,A
LR A,I
SL 4
SL 1
LR 0,A
LR A,S
SR 4
AS 0
NS 3
LR 3,A Pieces that can jump LB
BZ FIN3
LI H'13' The RBJ direction and J indicator
LR 5,A
PI STMV
CLR
XS 6
BZ FIN4 We want them all
BR FINB
FIN3 CLR
XS 6
BM FIN9 Continuation case
FIN4 LR A,4 Go to next board byte
INC
NI H'3'
LR 4,A
BZ FIN5 There are no more
JMP RFJ Go round again for next byte
FIN5 CLR
XS 2
BNZ FIN7 Jumps found
CLR
XS 6 Go to normal moves?
BZ RFN Yes
JMP AFT No more jumps
FIN7 LR A,HL
SR 4
CI H'C' Could be D maybe
BM FINA Too bad, out of space
CI H'1'
BNZ FIN8
PI BORD
JMP PMOV
FIN8 AI -H'2'
BM FINB
DCI MOBS
ADC
LR A,2
ST
FINB JMP SELE
FIN9 LR DC,H There was no continuation
PI RASC Put data back into SC
LIS H'E' Back up 2
SL 4
AS HL
LR HL,A
JMP FORE and go forward
FINA LISU KLOC Correct PASM and stop
LISL H'7'
LIS H'1' Allow for a piece capture
COM
AS S
LR S,A
JMP EVAL
* RFN LFN RBN LBN NORF NORT
RFN LI ISA
AS 4 Add byte off-set
LR IS,A Get to initial byte
LR A,S
LR 3,A
PI FKT
BZ RBN
LI ISE Start of empty region
AS 4 Add off-set
LR IS,A
LR A,I Look to RF empty squares
SL 4
LR 0,A
LR A,S
SR 4
SR 1
AS 0
NS 3
LR 3,A Pieces that can move RF
BZ LFN
CLR
LR 5,A
PI STMV
CLR
XS 6
BZ LFN
JMP SELE
LFN LI ISA
AS 4 Add byte off-set
LR IS,A Get to initial byte
LR A,S
LR 3,A
PI FKT
BZ RBN
LI ISE Start of empty region
AS 4 Add off-set
LR IS,A
LR A,I Look to LF empty squares
SL 4
SL 1
LR 0,A
LR A,S
SR 4
AS 0
NS 3
LR 3,A Pieces that can move LF
BZ RBN
LIS H'1'
LR 5,A
PI STMV
CLR
XS 6
BZ RBN
JMP SELE
RBN0 LR A,5
CI H'2' Which direction, 1, 2, or 3?
BM LBN It was a 3
BNZ LFN It was a 1
RBN LI ISA
AS 4 Add byte off-set
LR IS,A Get to initial byte
LR A,S
LR 3,A
PI BKT
BZ NORT
LI ISE-1
AS 4 Add off-set
LR IS,A
LR A,I Look to RB empty squares
SL 4
LR 0,A
LR A,S
SR 4
SR 1
AS 0
NS 3
LR 3,A Pieces that can move RB
BZ LBN
LIS H'2'
LR 5,A
PI STMV
CLR
XS 6
BNZ NORF
LBN LI ISA
AS 4 Add byte off-set
LR IS,A Get to initial byte
LR A,S
LR 3,A
PI BKT
BZ NORT
LI ISE-1
AS 4 Add off-set
LR IS,A
LR A,I Look to LB empty squares
SL 4
SL 1
LR 0,A
LR A,S
SR 4
AS 0
NS 3
LR 3,A Pieces that can move LB
BZ NORT
LIS H'3'
LR 5,A
PI STMV
CLR
XS 6
BZ NORT
NORF JMP SELE
*We get here if we want to compute mobility and also if no moves found
NORT LR A,4
INC
NI H'3'
LR 4,A
BZ NOR0
JMP RFN Go round again for next byte
NOR0 CLR
XS 2 Get mobility count
BNZ NOR1
JMP AFT Woops! no move found
NOR1 LR A,HL Where are we?
SR 4 Get Ply number
AI -H'1'
BNZ NOR2 Checking for possible player's moves?
PI BORD Put up board for player
JMP PMOV Yes, so let him move
NOR2 DCI PLY0 Player's choice of ply
AM
LR DC,H Reset DC
BM NOR4 Go on in this case
BNZ NOR3 Stop for sure
LI H'FD' Decision based on previous move
ADC
LM
NI H'10' Test jump flag
LR DC,H
BNZ NOR4 Go on if previous move was a jump
NOR3 JMP EVAL
NOR4 LR A,HL
SR 4
AI -H'2'
BM NOR7
DCI MOBS
ADC
LR A,2
ST Save mobility in MOBS space indexed by ply
NOR7 JMP SELE
* AFT
MAT EQU H'0' Register used for Material Adv. term
POT EQU H'6' Register used for Positional Adv. term
HLS EQU H'4' Register to save HL off-set
*No more moves found so time to back up
AFT LR A,HL Prepare to back up
CI H'20'
BNZ AFT0 Not at end of tree search
*Prepare for verification of player's reply
AI H'F0' Back to player's board
LR HL,A
LR A,7
COM Reverse sides
LR 7,A
DCI PLMV This space is also used by TREE routine
CLR Clear first byte
ST
JMP FIND Get verification info for move
AFT0 SR 4
AI -H'2' SCOR not saved for HL=10
SL 1 2 bytes per entry
DCI SCOR
ADC
LR Q,DC We'll use this as reference point
LM
LR MAT,A The current material advantage term
LM
LR POT,A The current positional term
LR A,HL
CI H'30'
BNZ AFTE Must test for double jump and continuation
LR DC,Q HL=30 case
LIS H'1'
COM Fast way for -2
ADC
LR Q,DC
LR A,POT
COM Make negative
INC
LR POT,A
LR A,MAT
COM
INC
LR MAT,A
CM
BM AF3S Back score for sure
BNZ AF3B Do not back score
LR A,POT
CM
BP AF3B Do not back score
AF3S LR DC,Q Backing score
LR A,MAT
ST
LR A,POT
ST
LR DC,H and saving board
XDC
DCI TREE
LISU 2
LISL 0
LIS H'1'
SL 4 Fast H'10'
LR S,A
PI TRAN
AF3B JMP AF1B Back level by 1
* HL>30 case
AFTE LR DC,H EVAL enters here
LIS H'1' Neg. ACTM for passed board
COM Fast -2
ADC
CLR
XM Is -1 board passed
BM AFC1 Yes
LI H'EF' Is -2 board passed
ADC
CLR
XM
BM AFN3 Yes
* -1 and -2 boards not passed
LIS H'3' Try to prune
COM Fast -H'4'
LR DC,Q
ADC
LR A,MAT
CM
BM AFN3 Can not prune
BNZ AFN2 Can prune
LR A,POT MAT's are equal
CM
BM AFN3 Can not prune
AFN2 JMP AF2B To back 2 levels
AFN3 LIS H'1' No, try normal back up
COM Fast -H'2'
LR DC,Q
ADC
LR Q,DC
LR A,POT with neg. scores
COM
INC
LR POT,A
LR A,MAT
COM
INC
LR MAT,A
CM
BM AFN4 Do back score
BNZ AFN5 Don't back score
LR A,POT Try POT terms
CM
BP AFN5 Don't back score
AFN4 LR DC,Q Backing score
LR A,MAT
ST
LR A,POT
ST
AFN5 JMP AF1B To back 1 level
* -1 board is passed so this was a multiple jump
AFC1 LR A,HL
NI H'10' Is HL odd?
BNZ AFD1 Yes, may want to save board
* HL is even case, so board should not be saved
AFE1 LIS H'3' Should back 2 however
COM Fast -H'4'
LR DC,Q Check on score
ADC
LR Q,DC
LR A,MAT
CM
BM AFE2 Should back score
BNZ AFE3 Should not back score
LR A,POT Must check POT term
CM
BP AFE3 Should not back score
AFE2 LR DC,Q Back score
LR A,MAT
ST
LR A,POT
ST
AFE3 JMP AF2B To back 2 levels
* HL is odd, may need to save board
AFD1 LI H'DE' We may want to save board
LR HLS,A Check on board back 3 levels
AFD2 LR DC,H
ADC Back to start of continuation
CLR
XM
BP AFD3 As far as we can go
LIS H'E'
SL 4 Fast H'E0'
AS HLS
LR HLS,A
BR AFD2
AFD3 LR A,HLS
SR 4
CI H'2' Back to HLS=2E
BNZ AFE1 Handle as if HL was even
DCI SCOR+2 Compare score with HL=30 level
LR A,MAT
CM
BM AFD4 Maybe should back
BNZ AF2B Should back only 2 levels
LR A,POT
CM
BP AF2B Back 2 levels without score
AFD4 DCI SCOR Now compare with HL=20 level
LR A,POT after sign change
COM
INC
LR POT,A
LR A,MAT
COM
INC
LR MAT,A
CM
BM AFD5 Back score
BNZ AF2B No, just back 2 levels
LR A,POT
CM
BP AF2B Just back 2 levels
AFD5 DCI SCOR Now save scores
LR A,MAT
ST
LR A,POT
ST
LR DC,H and save board at TREE
XDC
DCI TREE
LISU 2
LISL 0
LIS H'1'
SL 4 Fast H'10'
LR S,A
PI TRAN
AF2B LIS H'E' Back 2 levels
SL 4 Fast H'E0'
BR AFBB
AF1B LR A,7 Reverse sides and back 1 level
COM
LR 7,A
LIS H'F' Back 1 level
SL 4 Fast H'F0'
AFBB AS HL
LR HL,A
LR DC,H
PI RASC
JMP SELE
* EVAL
* HLS used temporarily in multiply routine
EVAL LISU 4 Compute the material advantage term
LISL 6 Get to ACTM
LR A,I
LR MAT,A ACTM
LR A,I
LR HLS,A PASM
COM
INC
AS MAT
LR 3,A ACTM-PASM
BP EVA0
COM
INC
EVA0 LR 1,A |A-P|
LR A,MAT
AS HLS A+P
COM
INC -(A+P)
DCI AP20
AM Add initial value +5
SR 1 and divide by 2
LR HLS,A Save temporarily, multiply by
CLR by smaller pos. # in 1
LR MAT,A Product into MAT
LR A,1
EVA1 NI H'1' Is the rightmost bit a 1?
BZ EVA2 No
LR A,HLS
AS MAT
LR MAT,A
EVA2 LR A,HLS
SL 1
LR HLS,A
LR A,1
SR 1
LR 1,A
BNZ EVA1 Product is not complete
CI H'3E'
BP EV21
LI H'3E' Limit range to avoid CM trouuble
EV21 CLR
XS 3 To get sign
LR A,MAT
BP EVA3
COM
INC
LR MAT,A Material advantage with sign
EVA3 LR A,HL
SR 4
AI -H'2'
LR 5,A Save PLY
DCI MOBS Compute mobility term
AI -H'1'
ADC
LM Get earlier mobility
COM
INC
AS 2 Add current mobility
CI H'C' Difference limited to |12|
BP EVA4
LIS H'C'
EVA4 CI -H'C'
BM EVA5
LI -H'C'
EVA5 SL 1 Make room for ply term
SL 1 Would like to shift more
LR POT,A Save difference (and free 2)
CLR
AS MAT
BNZ EVA6
CLR
AS POT
EVA6 LR A,5 Get ply value
BM EVA7 Test sign of significant term
COM If pos. we add H'C'-PLY
INC
AI H'C'
BR EVA8
EVA7 AI -H'C' If neg. we add PLY-H'C'
EVA8 AS POT Add it in
LR POT,A Positional term with PLY
LR A,HL
SR 4
AI -H'2'
SL 1
DCI SCOR
ADC
LR Q,DC
JMP AFTE AFT routine handles from here on
* EMPT WAST BRAK
EMPT LR K,P Empty squares in O'51' thru O'54'
LISU ELOC with guard bytes in 50 and 55
LISL 0
CLR
LR S,A Make sure guard byte is empty
LISU PLOC Start with ACTIVE
LIS H'4'
LR 0,A
BR EMP3
EMP2 LR A,IS
AI H'30' Actually subtracting 16
LR IS,A
EMP3 LR A,S
LR 1,A
LR A,IS
AI 4
LR IS,A
LR A,S
AS 1
LR 1,A
LR A,IS
AI H'D' Add 13 get to the correct EMPTY locat
LR IS,A
LR A,1
COM Reverse 1's and 0's
LR S,A
DS 0
BNZ EMP2
LR A,I To index only
CLR
LR S,A Upper guard byte
PK
*-*-*-*-*-*-*-*-*-*
*First replies (maximum of 4 each)
BOK2 DC H'33' 24,20 24-20 To 12-16
DC H'33' 24-20, 24-20
DC H'43' 23-19, 24-20 To 11-15
DC H'20' 22-17, 24-19
DC H'22' 22-17, 22-17 To 10-14
DC H'22' 22-17, 22-17
DC H'55' 22-18, 22-18 To 9-13
DC H'55' 22-18, 22-18
DC H'31' 24-20, 23-18 To 11-16
DC H'45' 24-19, 22-18
DC H'66' 21-17, 21-17 To 10-15
DC H'66' 21-17, 21-17
DC H'55' 22-18, 22-18 To 9-14
DC H'55' 22-18, 22-18
*-*-*-
WAST LR K,P Delay loop to WASTE some time
LIS H'4'
LR 0,A
WAS2 LIS H'F'
LR 1,A
WAS3 CLR
LR 2,A
WAS4 DS 2
BNZ WAS4
DS 1
BNZ WAS3
NOP
NOP
NOP
PK
*
BRAK LR A,HL
SR 4
DCI H'0C2B'
CM
BZ BRA2
JMP SELE
BRA2 NOP
NOP
NOP
NOP
JMP SELE
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
DC 0
END
*-*-*-
*First counter replies (maximum of 2 each)
*NOTE This table will not work as there are 28 possible third move
*nombers that have to be stored and this will take a complete byte for each
*thus requiring 98 bytes for this table.
*
BOK3 DC To 12-16 24-19
DC To 12-16 23-18
DC To 12-16 22-17
DC H'00' 8-12, 8,12 To 12-16 24-20
DC H'00' 16-23, 16,23 To 12-16 23-19
DC To 12-16 22-18
DC To 12-16 21-17
DC H'00' 15-24, 15-24 To 11-15 24-19
DC H'00' 8-11, 8-11 To 11-15 23-18
DC H'60 9-13, 8-11 To 11-15 22-17
DC H'00' 8-11, 8-11 To 11-15 24-20
DC H'05 8-11, 9-14 To 11-15 23-19
DC H'00' 15-22, 15-22 To 11-15 22-18
DC To 11-15 21-17
*-*- THERE WILL BE 49 BYTES OF THESE, EACH WITH 2 COUNTER REPLIES
*-*- The ones listed at present are from Lee's Guide
* END